#ifndef SRC_RPC_MODULE_EPOLL_H_
#define SRC_RPC_MODULE_EPOLL_H_

#ifdef __linux__

#include "include/event_manager.h"
#include <sys/epoll.h>

namespace rpc {
  class Epoll : public EventManager {
    public:
    Epoll()
    : ep_fd_(-1) {
    }
    ~Epoll();

    bool Init();

    bool Add(Event* ev, int flag);
    void Del(Event* ev, int flag);
    bool Mod(Event* ev, int flag);

    void Loop();

    private:
    int ep_fd_;
    std::vector<epoll_event> events_;

    std::set<int> fds_;

    const static int KMaxEvent = 128;

    DISALLOW_COPY_AND_ASSIGN(Epoll);
  };
}
#endif
#endif  // SRC_RPC_MODULE_EPOLL_H
